﻿// ajax 호출 후 에러 발생시, 에러메시지를 새 창으로 보여줌
function showErrorMessageWindow(responseText) {
    /* 개발 중일 때만, 이 기능 사용함. TODO: 개발 후 주석으로 막기
    w = window.open();
    w.document.write(responseText);
    */
}

// jquery ajax load 함수 호출할 때 사용할 에러 핸들러 콜백 함수
function OnAjaxLoadComplete(responseText, textStatus, xmlHttpRequest) {
    if (textStatus !== "success") {
        showErrorMessageWindow(responseText);
        var s = "서버와 통신 장애가 발생했습니다" +
                "\n status: " + textStatus;
        alert(s);
    }
}

// ajax 호출을 하고, 호출 결과가 성공이면 js callback 호출하거나 리턴된 url로 리다이렉트
function AjaxPost(url, param, confirmMessage, callback) {
    if (typeof confirmMessage == 'string') {
        if (!confirm(confirmMessage)) return;
    }
    $.ajax({
        type: "post", dataType: "json",
        url: url, data: param,
        error: AjaxErrorHandler,
        success:
            function (data, textStatus, jqXHR) {
                if (data.success) {
                    if (typeof data.message == 'string')
                        alert(data.message);
                    if (typeof callback == 'function')
                        callback(data, textStatus, jqXHR);
                    if (typeof data.url == 'string')
                        window.location = data.url;
                } else
                    alert("작업 실패\n\n" + data.message);
            }
    });
    return false;
}

// form 태그 안의 버튼을 클릭하여 폼을 submit
function AjaxPostForm(form, url, confirmMessage, callback) {
    var param = form.serialize();
    if (form.validateForm())
        AjaxPost(url, param, confirmMessage, callback);
}

// 위의 AjaxPost 에서 사용된 에러 핸들러 콜백 함수
function AjaxErrorHandler(jqXHR, textStatus, message) {
    showErrorMessageWindow(jqXHR.responseText);
    var s = "서버와 통신 장애가 발생했습니다" +
            "\n status: " + textStatus +
            "\n message: " + message;
    alert(s);
}

// 화면 중앙에 위치시키는 jquery 확장 메소드
jQuery.fn.center = function () {
    this.css("position", "absolute");
    this.css("top", Math.max(0, (($(window).height() - $(this).height()) * 2 / 5) + $(window).scrollTop()) + "px");
    this.css("left", Math.max(0, (($(window).width() - $(this).width()) * 2 / 5) + $(window).scrollLeft()) + "px");
    return this;
}

function showWaitImage() {
    $("#wait_image").center().delay(300).show(0);
}

// wait message
$(document).ajaxStart(function () {
    $("#wait_image").center().delay(300).show(0);
});

$(document).ajaxStop(function () {
    $("#wait_image").dequeue().hide();
});

// ajax 호출을 하고, 호출 결과 html을 target의 innerHtml로 load 함.
function AjaxLoad(url, param, target) {
    $.ajax({
        type: "post", dataType: "html",
        url: url, data: param,
        error: AjaxErrorHandler,
        success:
            function (data, textStatus, jqXHR) {
                $(target).html(data);
            }
    });
    return false;
}